package com.cloud.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cloud.admin.common.constant.UserConstants;
import com.cloud.admin.common.core.domain.Ztree;
import com.cloud.admin.common.exception.BusinessException;
import com.cloud.admin.common.utils.StringUtils;
import com.cloud.admin.mapper.SysDeptMapper;
import com.cloud.admin.model.entity.SysDept;
import com.cloud.admin.model.entity.SysRole;
import com.cloud.admin.service.SysDeptService;

import java.util.List;

/**
 * 部门表
 *
 * @author douhaichao code generator
 * @date 2019-07-09 10:27:13
 */
public interface SysDeptService extends IService<SysDept> {

    int count(SysDept req);

    List<SysDept> selectAll(SysDept req);

    IPage<SysDept> selectPage(Page page, SysDept req);

    IPage<SysDept> selectPageByLike(Page page, SysDept req);

    SysDept selectOne(SysDept req);

    /**
     * 查询部门管理树
     *
     * @param dept 部门信息
     * @return 所有部门信息
     */
    List<Ztree> selectDeptTree(SysDept dept);

    /**
     * 根据角色ID查询部门（数据权限）
     *
     * @param role 角色对象
     * @return 部门列表（数据权限）
     */
    List<Ztree> roleDeptTreeData(SysRole role);

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
    boolean checkDeptExistUser(Integer deptId);

    /**
     * 新增保存部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    int insertDept(SysDept dept);

    /**
     * 修改保存部门信息
     *
     * @param dept 部门信息
     * @return 结果
     */
    int updateDept(SysDept dept);

    /**
     * 校验部门名称是否唯一
     *
     * @param dept 部门信息
     * @return 结果
     */
    String checkDeptNameUnique(SysDept dept);

    /**
     * 获取部门信息，包含父级名称
     *
     * @param deptId
     * @return
     */
    SysDept getDeptInfo(Integer deptId);
}
